package com.xtsoft.platform.task.service;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Service;

import com.xtsoft.core.utils.ResultMessage;
import com.xtsoft.core.utils.ResultMsg;


import io.netty.util.CharsetUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
public class PingDeviceTask {

//  全都不能用，需要调用busdevice  private String cron;
//    @Autowired
//    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
////    @Autowired
////    private NettyClientService nettyClientService;
//
//    private Map<String, ScheduledFuture<?>> futuresMap = new ConcurrentHashMap<>();
//	/**
//	 *
//	 * <p> 每15秒执行，ping车上的救护车设备  </p>
//	 * @param list 设备集合
//	 * @return
//	 * @throws InterruptedException
//	 * @return ResultMessage
//	 * @throws
//	 * @author wangyalin
//	 * @date 2020年6月18日
//	 * @time 下午1:49:42
//	 */
////	public ResultMessage startPing(List<BusDevice> list,BusTask busTask){
////		cron = "*/15 * * * * ?";
////		ScheduledFuture<?> scheduledFuture = threadPoolTaskScheduler.schedule(new myTask(list,busTask), new CronTrigger(cron));
////		futuresMap.put(busTask.getBusTaskId(), scheduledFuture);
////        return new ResultMessage(true,"开始ping向各设备！");
////	}
//
//	/**
//	 *
//	 * <p> 任务到达医院时，停止任务  </p>
//	 * @param busTask
//	 * @return
//	 * @return ResultMessage
//	 * @throws
//	 * @author wangyalin
//	 * @date 2020年6月18日
//	 * @time 下午2:11:26
//	 */
//	public ResultMessage stopPing(List<BusDevice> list,BusTask busTask){
//		ScheduledFuture<?> scheduledFuture = futuresMap.get(busTask.getBusTaskId());
//        if (scheduledFuture != null) {
//        	futuresMap.remove(scheduledFuture);
//        	scheduledFuture.cancel(true);
//        	System.out.println("任务结束，停止ping！");
//        }
//
//        for (BusDevice busDevice : list) {
//        	if(busDevice.getSysDevice().getDeviceModelCode()==DeviceModelCode.ZollX.ordinal()){
//        		NettyClient nettyClient;
//				try {
//					nettyClient = nettyClientService.start(new ZollNettyHelper(),"localhost",8868);
//					//String start ="start|192.168.1.182|"+dateString;
//			        String start ="end|"+busDevice.getIp();
//			        byte[] bytes = start.getBytes();
//			        int length = bytes.length;
//					nettyClient.sendMsg(length+start, CharsetUtil.UTF_8);
//					System.out.println("发送停止消息");
//					ResultMsg stop = nettyClientService.stop(busDevice);
//					System.out.println(stop.getMsg());
//				} catch (Exception e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//        	}
//
//		}
//
//		return new ResultMessage(true,"任务结束，停止ping！");
//	}
//
//	private class myTask implements Runnable {
//        private List<BusDevice> list;
//        private BusTask busTask;
//
//        myTask(List<BusDevice> list,BusTask busTask) {
//            this.list = list;
//            this.busTask = busTask;
//        }
//
//        @Override
//        public void run() {
//        	System.out.println("开始ping");
//        	//如果集合中没有设备了或者任务停止了，关闭定时任务
//        	if(list.size()==0 || busTask.getProgress()==2 || busTask.getState()==0){
//        		ScheduledFuture<?> scheduledFuture = futuresMap.get(busTask.getBusTaskId());
//                if (scheduledFuture != null) {
//                	futuresMap.remove(scheduledFuture);
//                	scheduledFuture.cancel(true);
//                	System.out.println("所有设备已开启");
//                }
//        	}
//
//        	for (int i = 0; i < list.size(); i++) {
//        		BusDevice busDevice = list.get(i);
//        		String ip = busDevice.getIp();
//        		String line = null;
//        		try {
//        			Process pro = Runtime.getRuntime().exec("ping " + ip);
//    	            BufferedReader buf = new BufferedReader(new InputStreamReader(
//    	                    pro.getInputStream()));
//    	            int connectedCount = 0;
//    	            while ((line = buf.readLine()) != null)
//    	            	if(line.contains("TTL=")){
//    	            		connectedCount++;
//    	                }
//        		   //失败跳过继续
//        		   if(connectedCount<2){
//        			   //System.out.println(ip+"设备未开启！");
//        			   continue;
//        		   }
//        		   //成功便开启监听
//        		   //如果是IPM10
//        		   if(busDevice.getSysDevice().getDeviceModelCode()==DeviceModelCode.MindrayIpm10.ordinal()){
//        			   /*NettyClient nettyClient = new NettyClient(ip,4601);
//        			   nettyClient.start(new Ipm10NettyHelper());
//        			   nettyClient.sendMsg("Hello world", null);
//        			   nettyClient.stop();*/
//        			   //System.out.println(ip+"IPM10设备已启动！");
//        			   list.remove(busDevice);
//        			   i--;
//        		   }
//        		   if(busDevice.getSysDevice().getDeviceModelCode()==DeviceModelCode.ZollX.ordinal()){
//        			   	NettyClient nettyClient = nettyClientService.start(new ZollNettyHelper(),"localhost",8868);
//        				SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddkkmmss");
//        		        Date date = new Date();
//        		        String dateString = sf.format(date);
//        		        String start ="start|192.168.1.182|20200702095001";
//        		        //String start ="start|"+ip+"|"+dateString;
//        		        byte[] bytes = start.getBytes();
//        		        int length = bytes.length;
//        				nettyClient.sendMsg(length+start, CharsetUtil.UTF_8);
//        				System.out.println("发送卓尔消息："+length+start);
//        				ResultMsg stop = nettyClientService.stop(busDevice);
//        				System.out.println(stop.getMsg());
//        				list.remove(busDevice);
//        				i--;
//        		   }
//        		   if(busDevice.getSysDevice().getDeviceModelCode()==DeviceModelCode.MindrayD6.ordinal()){
//        			   //System.out.println(ip+"D6设备已启动！");
//
//        			   list.remove(busDevice);
//        			   i--;
//        		   }
//        		  } catch (Exception e) {
//        		   e.printStackTrace();
//        		  }
//
//			}
//        }
//    }
	
}
